class Prototype : ICloneable  // 需要实现克隆接口
{
	public string Name { get; set; }
	public PrototypeA PrototypeA { get; set; }  // 引用类型属性
	public object Clone() {  // 接口克隆方法
		Prototype prototype = (Prototype)this.MemberwiseClone();  // 浅表复制
		prototype.PrototypeA = (PrototypeA)PrototypeA.Clone();  // 将引用类型属性也克隆一份
		return prototype;
	}
}

class PrototypeA : ICloneable {  // 引用类型属性也必须实现克隆接口
	public string Name { get; set; }
	public object Clone() { return this.MemberwiseClone(); }
}